import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios'
import moment from 'moment'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.prototype.$http = axios
Vue.prototype.$host = 'http://localhost'
Vue.use(ElementUI)
Vue.config.productionTip = false

//全局过滤器
Vue.filter('dateFmt', (input, formatString) => {
  //es5函数参数设置默认值
  //const lastFormatString = formatString ||

  // moment(input) 把时间字符串转成时间对象
  // format(formatString) 把时间对象，按照指定格式，格式化成符合条件的字符串
  return moment(input).format(formatString)
})

axios.interceptors.request.use(function (config) {
  // startLoading()
  // 在发送请求之前做些什么，例如加入token
  if (config.url !== '/api/login') {
    config.headers.Authorization = store.state.authorization
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// use(两个参数)
axios.interceptors.response.use(res => {
  // endLoading()
  // 请求成功对响应数据做处理
  if (res.headers.Authorization !== undefined) {
    store.state.authorization = res.headers.Authorization
  }
  // 该返回的数据则是axios.then(res)中接收的数据
  return res
}, err => {
  // 在请求错误时要做的事儿
  // 该返回的数据则是axios.catch(err)中接收的数据
  return Promise.reject(err)
})

//全局路由导航钩子
router.beforeEach((to, from, next) => {
  if (to.path === '/updatePassword/updateStepOne' || to.path === '/updatePassword/updateStepTwo' || to.path === '/updatePassword/updateStepThree') {
    next()
  } else {
    if (store.state.user.status === 1) {
      next({
        path: '/updatePassword/updateStepOne'
      })
    } else {
      //判断当前路由是否需要权限,即当前页面是否需要登录
      if (to.path !== '/login') {
        //判断sessionStorage中是否存储有登录成功的token对象
        if (store.state.authorization) {
          //退出拦截,放行
          next()
        } else {
          next({
            //跳转登录页面,注:这里"/"即登录页面路径
            path: '/',
          })
        }
      } else {
        next()
      }
    }
  }
})

let loading

function startLoading () {    //使用Element loading-start 方法
  loading = ElementUI.Loading.service({
    lock: true,
    text: '拼命加载中...',
  })
}

function endLoading () {    //使用Element loading-close 方法
  loading.close()
}

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
